﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;
using App_Negocio;

public partial class AltaAlimento : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            cargarInsumos();
            cargarTipoAlimento();
            cargarGrupoAlimento();
            crearDetallesAlimento();
            }
    }

    private void crearDetallesAlimento()
    {
        LinkedList<DetallesGUI> detallesAlimento = new LinkedList<DetallesGUI>();
        Session["detallesAlimento"] = detallesAlimento;
    }
  
    private void cargarInsumos()
    {
     
        gvInsumos.DataSource = App_Negocio.Insumo.listarInsumosTabla().DefaultView;
        gvInsumos.DataKeyNames = new string[] { "Id", "Nombre", "UnidadMedida" };
        gvInsumos.DataBind();
        
          }

    private void cargarTipoAlimento()
    {
        ddlTipoAlimento.DataSource = App_Negocio.Alimento_Tipo.listarTiposDeAlimento();
        ddlTipoAlimento.DataValueField = "Id";
        ddlTipoAlimento.DataTextField = "Nombre";
        ddlTipoAlimento.DataBind();
    }

    private void cargarGrupoAlimento()
    {
        Alimento_Grupo grupo = new Alimento_Grupo();

        ddlGrupoAlimento.DataSource = grupo.popularGrupoAlimento();
        ddlGrupoAlimento.DataValueField = "Id";
        ddlGrupoAlimento.DataTextField = "Nombre";
        ddlGrupoAlimento.DataBind();
    }
    
    protected void btnAgregarInsumo_Click(object sender, EventArgs e)
    {
        if (gvInsumos.SelectedIndex == -1) { lblDebeSeleccionarInsumo.Visible = true; return; }
        if (txtCantidad.Text == "") { lblCompletarCantidad.Visible = true;  }
        else
        {

            LinkedList<DetallesGUI> detallesAlimento = (LinkedList<DetallesGUI>)Session["detallesAlimento"];

            App_Negocio.Alimento_Detalle nuevo = new App_Negocio.Alimento_Detalle();
            nuevo.Cantidad = float.Parse(txtCantidad.Text);
            nuevo.Insumo = new Insumo();
            nuevo.Insumo.Id = int.Parse(string.Format(gvInsumos.SelectedDataKey.Values["Id"].ToString()));
            nuevo.Insumo.Nombre = lblInsumo.Text;
            nuevo.Insumo.Unidad_Medida = new Unidad_Medida();
            nuevo.Insumo.Unidad_Medida.Nombre = lblUMedida.Text;

            detallesAlimento.AddLast(new DetallesGUI(nuevo));

            gvDetalleAlimento.DataSource = detallesAlimento;
            gvDetalleAlimento.DataBind();
            Session["detallesAlimento"] = detallesAlimento;
            txtCantidad.Text = "";
            lblInsumo.Text = "";
            lblCompletarCantidad.Visible = false;
            lblDebeSeleccionarInsumo.Visible = false;
        }

    }

    protected void gvDetaleAlimento_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        LinkedList<DetallesGUI> detallesAlimento = (LinkedList<DetallesGUI>)Session["detallesAlimento"];

        DetallesGUI nuevo = detallesAlimento.ElementAt<DetallesGUI>(e.RowIndex);

        detallesAlimento.Remove(nuevo);
       
        gvDetalleAlimento.DataSource = detallesAlimento;
        gvDetalleAlimento.DataBind();
        Session["detallesAlimento"] = detallesAlimento;
        
    }

    private class DetallesGUI
    {
        private App_Negocio.Alimento_Detalle ad;

        public App_Negocio.Alimento_Detalle Ad
        {
            get { return ad; }
        }
        private string insumoNombre;

        public string InsumoNombre
        {
            get { return ad.Insumo.Nombre; }
            set { ad.Insumo.Nombre= value; }
        }
        private float cantidad;

        public float Cantidad
        {
            get { return ad.Cantidad; }
            set { ad.Cantidad = value; }
        }
        private string unidadMedida;

        public string UnidadMedida
        {
            get { return ad.Insumo.Unidad_Medida.Nombre; }
            set { ad.Insumo.Unidad_Medida.Nombre = value; }
        }

        public DetallesGUI(App_Negocio.Alimento_Detalle fuente)
        {
            this.ad = fuente;


        }
    }
   
    protected void Agregar_Click(object sender, EventArgs e)
    {

    }
  
    protected void btnGuardar_Click(object sender, EventArgs e)
    {
        if (controlarCampos() == true) { return; }
        App_Negocio.Alimento nuevo = new App_Negocio.Alimento();
        nuevo.Nombre = txtNombre.Text;
        nuevo.Descripcion = tbxDescripcion.Text;
        nuevo.Tipo_AlimentoRef = new App_Negocio.Alimento_Tipo();
        nuevo.Tipo_AlimentoRef.Id = int.Parse(ddlTipoAlimento.SelectedValue);
        nuevo.AlimentoGrupo = new Alimento_Grupo();
        nuevo.AlimentoGrupo.Id = int.Parse(ddlGrupoAlimento.SelectedValue);
        
        

        //detalle
        LinkedList<DetallesGUI> detallesAlimento = (LinkedList<DetallesGUI>)Session["detallesAlimento"];
        nuevo.Detalle = new List<App_Negocio.Alimento_Detalle>();
        foreach (DetallesGUI det in detallesAlimento)
        {
            nuevo.Detalle.Add(det.Ad);
        }
        nuevo.guardadAlimento();
        ocultarYLimpiar();

    }
  
    protected void gvInsumos_SelectedIndexChanging(object sender, EventArgs e)
    {
        lblInsumo.Text = string.Format(gvInsumos.SelectedDataKey.Values["Nombre"].ToString());
        lblUMedida.Text = string.Format(gvInsumos.SelectedDataKey.Values["UnidadMedida"].ToString());
    }

    private Boolean controlarCampos() { 
    Boolean bandera = false;
    if (txtNombre.Text == "") { bandera = true; lblCheckNombre.Visible = true; } else {lblCheckNombre.Visible = false; }
    if (ddlGrupoAlimento.SelectedIndex == 0) { bandera = true; lblCheckGrupo.Visible = true; }else {lblCheckGrupo.Visible = false; }
    if (ddlTipoAlimento.SelectedIndex == 0) { bandera = true; lblCheckTAlimento.Visible = true; } else { lblCheckTAlimento.Visible = false; }
    if (bandera == false){return false;}else{return true;}  
    }
     private void ocultarYLimpiar(){
         txtNombre.Text = "";
         lblCheckGrupo.Visible = false;
         lblCheckNombre.Visible = false;
         ddlGrupoAlimento.SelectedIndex = 0;
         ddlTipoAlimento.SelectedIndex = 0;
         LinkedList<DetallesGUI> detallesAlimento = new LinkedList<DetallesGUI>();
         gvDetalleAlimento.DataSource = detallesAlimento;
         gvDetalleAlimento.DataBind();
         Session["detallesAlimento"] = detallesAlimento;
     }
    
}
